package cn.kmbeast.controller;

import cn.kmbeast.aop.Pager;
import cn.kmbeast.context.LocalThreadHolder;
import cn.kmbeast.pojo.api.ApiResult;
import cn.kmbeast.pojo.api.Result;
import cn.kmbeast.pojo.dto.query.base.QueryDto;
import cn.kmbeast.pojo.dto.query.extend.UserHealthQueryDto;
import cn.kmbeast.pojo.entity.HealthModelConfig;
import cn.kmbeast.pojo.entity.UserHealth;
import cn.kmbeast.pojo.vo.ChartVO;
import cn.kmbeast.pojo.vo.UserHealthVO;
import cn.kmbeast.pojo.vo.UserVO;
import cn.kmbeast.service.UserHealthService;
import cn.kmbeast.utils.DateUtil;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/user-health")
public class UserHealthController {
    /**
     *  UserHealthService 是健康模型业务的接口  实现自动装配
     */
    @Resource
    private UserHealthService userHealthService;


    /**
     * 用户健康记录的保存
     * @param userHealthList  用户健康记录的爆粗
     * @return Result 通用响应数据
     */
    @PostMapping("/save")
    public Result<Void> save(@RequestBody List<UserHealth> userHealthList) {
        if (userHealthList == null){
            return ApiResult.error("参数错误");
        }else{
            UserHealth userHealth = userHealthList.get(0);
            if (userHealth.getUserId() == null){
                return ApiResult.error("参数错误");
            }else{
                return  userHealthService.save(userHealth);
            }
        }
    }
    /**
     * 用户健康记录的批量删除
     * @param ids  接受用户健康记录id的List集合
     * @return Result<Void>
     */
    @PostMapping("/batchDelete")
    public Result<Void> batchDelete(@RequestBody List<Long> ids) {
        return  userHealthService.batchDelete(ids);
    }

    /**
     * 用户健康记录的修改
     * @param userHealth 接受健康模型
     * @return Result<Void>
     */
    @PutMapping("/update")
    public Result<Void> update(@RequestBody UserHealth userHealth) {
        return  userHealthService.update(userHealth);
    }

    /**
     * 用户健康的查询
     * @param userHealthQueryDto 接受用户健康类型的查询类
     * @return Result<List < HealthModelConfigDto>> 返回健康模型列表
     */
    @Pager
    @PostMapping("/query")
    public Result<List<UserHealthVO>> query(@RequestBody UserHealthQueryDto userHealthQueryDto) {
        return  userHealthService.query(userHealthQueryDto);
    }

    /**
     * 按照参数 days 来查询时间段内的记录条数
     */
    @GetMapping(value = "/daysQuery/{day}")
    @ResponseBody
    public Result<List<ChartVO>> query(@PathVariable Integer day) {
        return userHealthService.daysQuery(day);
    }


    /**
     * 用户健康记录查询
     *
     * @param id  健康模型ID
     * @param day 往前查多少天
     * @return Result<List < UserHealthVO>> 通用响应
     */
    @GetMapping(value = "/timeQuery/{id}/{day}")
    public Result<List<UserHealthVO>> timeQuery(@PathVariable Integer id,
                                                @PathVariable Integer day) {
        // 有了时间范围，也有了健康模型ID，还需要什么？
        //从当前线程中拿到用户的id
        Integer userId = LocalThreadHolder.getUserId();
        //根据天数 返回时间段
        QueryDto queryDto = DateUtil.startAndEndTime(day);
        //封装查询条件
        UserHealthQueryDto userHealthQueryDto = new UserHealthQueryDto();
        userHealthQueryDto.setHealthModelConfigId(id);
        userHealthQueryDto.setUserId(userId);
        userHealthQueryDto.setStartTime(queryDto.getStartTime());
        userHealthQueryDto.setEndTime(queryDto.getEndTime());
        return userHealthService.query(userHealthQueryDto);
    }


}
